package com.wsoft.core.utils;

import com.wsoft.core.context.AuthLoginModeContextHolder;
import com.wsoft.core.exception.Asserts;
import com.wsoft.enums.AuthLoginModeEnum;
import com.wsoft.enums.ResponseCodeEnum;
import com.wsoft.vo.LoginUserDetail;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;

/**
 * 获取当前登录用户信息
 *
 * @author: juiet
 * @date: 2024年08月25日 16:08
 */
public class LoginUserUtil {

    public static LoginUserDetail getUserInfo(){

        //当前线程用户信息登录模式
        String mode = AuthLoginModeContextHolder.authLoginMode();

        Authentication auth = SecurityContextHolder.getContext().getAuthentication();

        //当前用户获取结果
        boolean authSuccess = true;
        if (auth == null || !auth.isAuthenticated() || !(auth.getPrincipal() instanceof LoginUserDetail)) {
            authSuccess = false;
        }

        //无需登录时不返回当前用户信息（有也不返回）
        if(AuthLoginModeEnum.NOT.getCode().equals(mode)){
            return null;
        }else if(AuthLoginModeEnum.NEED.getCode().equals(mode)){
            return authSuccess ? (LoginUserDetail) auth.getPrincipal():null;
        }

        //强制登录时，没有用户信息则报错
        if(authSuccess){
            return (LoginUserDetail) auth.getPrincipal();
        }else{
            Asserts.fail(ResponseCodeEnum.UNAUTHORIZED);
            return null;
        }

    }
}
